#pragma once

#include <semaphore.h>
#include <zookeeper/zookeeper.h>
#include <string>
#include <functional>
#include <memory>
#include <future>

class Zkclient {
public:
    Zkclient();
    ~Zkclient();
    
    // 连接 ZooKeeper 服务器
    void Start();
    
    // 创建 znode 节点（异步）
    bool Create(const std::string& path, const std::string& data, int state = ZOO_EPHEMERAL);
    
    // 获取 znode 节点的值（异步）
    std::string GetData(const std::string& path);
    
    // 检查节点是否存在（异步）
    bool Exists(const std::string& path);

private:
    zhandle_t *m_zhandle;
    sem_t m_connect_sem;
    
    // 静态回调函数
    static void global_watcher(zhandle_t *zh, int type, 
                              int state, const char *path, void *watcherCtx);
};